/**
 * @(#)BaseService.java 1.0 2017年3月3日
 *
 * Copyright (c) 2016, YUNXI. All rights reserved.
 * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package com.project.util;

import java.util.List;

import com.dtyunxi.rest.PageData;
import com.dtyunxi.rest.RestResponse;

/**
 * 网关层基础的服务类
 * @author chen.liangzhen
 * @time 2017年3月3日 下午5:42:31
 */
public class BaseService {
	/**
	 * 生成返回结果	v2.1.0
	 * @author chen.liangzhen
	 * @time 2017年3月3日 下午5:42:31
	 * @param result
	 * @return
	 */
	public static RestResponse generateRestResponse(RestResponseParamVo restResponseParamVo) {
		
		int resultCode; 
		String successMessage = "查询成功";
		Object data = restResponseParamVo.getData();
		
		if(restResponseParamVo.isDealFlag()) {
			resultCode = 0;
			if(MessageType.SAVE == restResponseParamVo.getMessageType()) {
				successMessage = "保存成功";
			} else if(MessageType.UPDATE == restResponseParamVo.getMessageType()) {
				successMessage = "修改成功";
			} else if(MessageType.DELETE == restResponseParamVo.getMessageType()) {
				successMessage = "删除成功";
			}
		} else {
			successMessage = "系统错误！";
			if(restResponseParamVo.isReturnStatusCode()) {
				resultCode = restResponseParamVo.getStatusCode();
			} else {
				resultCode = 1;
			}
		}
		
		return new RestResponse(resultCode, successMessage, data);
	}
	
	/**
	 * 将数据包装成PageData对象
	 * @author chen.liangzhen
	 * @time 2017年3月3日 下午5:42:31
	 * @param pageNo
	 * @param pageSize
	 * @param listVo
	 * @param total
	 * @return
	 */
	public static PageData listVoToPageData(int currentPage, int pageCount, List<?> listVo, int total) {
		PageData pageData = new PageData();
		pageData.setCurrentPage(currentPage);
		pageData.setPageCount(pageCount);
		//pageData.setCount(total);
		pageData.setData(listVo);
		return pageData;
	}
	
	/**
	 * main
	 * @author chen.liangzhen
	 * @time 2017年3月3日 下午5:42:31
	 * @param args
	 */
	public static void main(String[] args) {
		RestResponseParamVo restResponseParamVo = new RestResponseParamVo();
		restResponseParamVo.setDealFlag(false);
		restResponseParamVo.setReturnStatusCode(true);
		restResponseParamVo.setStatusCode(StatusCode.S_500);
		RestResponse generateRestResponse = new BaseService().generateRestResponse(restResponseParamVo);
		System.out.println(generateRestResponse.getResultCode() +"||"+ generateRestResponse.getResultMsg() +"||"+ String.valueOf(generateRestResponse.getData()));
		
		RestResponseParamVo restResponseParamVo2 = new RestResponseParamVo();
		restResponseParamVo2.setDealFlag(true);
		restResponseParamVo2.setMessageType(MessageType.UPDATE);
		RestResponse generateRestResponse2 = new BaseService().generateRestResponse(restResponseParamVo2);
		System.out.println(generateRestResponse2.getResultCode() +"||"+ generateRestResponse2.getResultMsg() +"||"+ String.valueOf(generateRestResponse2.getData()));
	}
}

/**
 * 组装参数
 * @author chen.liangzhen
 * @time 2017年3月3日 下午5:42:31
 *
 */
class RestResponseParamVo {
	private boolean dealFlag;
	private MessageType messageType;
	private Object data;
	private boolean returnStatusCode = false;//是否要返回状态码
	private int statusCode;//状态码
	
	public boolean isDealFlag() {
		return dealFlag;
	}
	public void setDealFlag(boolean dealFlag) {
		this.dealFlag = dealFlag;
	}
	public MessageType getMessageType() {
		return messageType;
	}
	public void setMessageType(MessageType messageType) {
		this.messageType = messageType;
	}
	public Object getData() {
		return data;
	}
	public void setData(Object data) {
		this.data = data;
	}
	public boolean isReturnStatusCode() {
		return returnStatusCode;
	}
	public void setReturnStatusCode(boolean returnStatusCode) {
		this.returnStatusCode = returnStatusCode;
	}
	public int getStatusCode() {
		return statusCode;
	}
	public void setStatusCode(int statusCode) {
		this.statusCode = statusCode;
	}
	
}

/**
 * 提示的信息类型
 * @author chen.liangzhen
 * @time 2017年3月3日 下午5:42:31
 */
enum MessageType {
	SAVE, UPDATE, DELETE
}

/**
 * 状态码（包括自定义的状态码也在这里面写）
 * @author chen.liangzhen
 * @time 2017年3月3日 下午5:42:31
 */
class StatusCode {
	protected StatusCode() {}
	protected static final int S_200 = 200;//服务器已成功处理了请求。通常，这表示服务器提供了请求的网页
	protected static final int S_302 = 302;//服务器目前从不同位置的网页响应请求，但请求者应继续使用原有位置来进行以后的请求
	protected static final int S_400 = 400;//服务器不理解请求的语法
	protected static final int S_403 = 403;//服务器拒绝请求
	protected static final int S_404 = 404;//服务器找不到请求的网页
	protected static final int S_405 = 405;//禁用请求中指定的方法
	protected static final int S_500 = 500;//服务器内部错误
}